package main

import (
	"fmt"
	"github.com/fvbock/endless"
	"github.com/gin-gonic/gin"
	"io"
	"io/ioutil"
	"log"
	"os"
	"runtime"
	"wwgin/bootstrap"
	"wwgin/config"
	"wwgin/global/variable"
	"wwgin/router"
)

//入口文件
func main() {
	bootstrap.LoadConf() //加载配置,初始化模块
	//是否是调试模式
	if config.AppConf.Debug {
		fmt.Println("当前环境变量:", variable.Env)
		gin.SetMode(gin.DebugMode) //设置模式 debug(调试模式) release(发行模式) test(测试)
		gin.ForceConsoleColor()    //强制控制台日志的颜色
	} else {
		gin.SetMode(gin.ReleaseMode)
		//是否开启Gin框架的访问日志,关闭可以提升性能
		if config.AppConf.Logs.GinLog {
			f, _ := os.Create(variable.ROOT_PATH + config.AppConf.Logs.GinLogName)
			gin.DefaultWriter = io.MultiWriter(f) //记录日志到指定的文件
		} else {
			gin.DefaultWriter = ioutil.Discard //关闭控制台的日志输出
		}
	}

	r := gin.Default()
	if len(config.AppConf.TrustedProxies) != 0 { //设置信任的代理
		err2 := r.SetTrustedProxies(config.AppConf.TrustedProxies)
		if err2 != nil {
			log.Fatal("系统运行失败:", err2)
		}
	} else {
		_ = r.SetTrustedProxies(nil)
	}
	router.InitApiRouter(r)   //注册api路由组
	router.InitOtherRouter(r) //注册other路由组

	//linux采用endless包,让程序支持平滑平滑启动
	sysType := runtime.GOOS
	var err error
	if sysType == "linux" {
		err = endless.ListenAndServe(":"+variable.Port, r)
	} else {
		err = r.Run(":" + variable.Port)
	}

	if err != nil {
		log.Fatal("系统运行失败:", err)
	}
}
